(function () {
    // 定义一个 Animal 类
    class Animal {
        name: string;
        age: number;

        constructor(name: string, age: number) {
            this.name = name
            this.age = age
        }
        sayHello() {
            console.log('动物叫声');
        }
    }

    /**
     *  Dog extends Animal
     *      此时 Animal 被称为父类 Dog 被称为子类
     *      使用继承后，子类会拥有父类所有的方法和属性
     *      通过继承可以将多个类共有的代码写在一个父类中
     *          这样只需要写一个即可让所有的子类都同时拥有父类中的属性
     *          如果父类没有某些属性，可以直接添加
     *          如果子类中添加和父类相同的方法，则会覆盖
     *              子类覆盖掉父类方法的形式，称为重写
     * 
     */
    // 定义表示一个狗的类
    // extends 继承
    // 使 Dog 类继承 Animal 类
    class Dog extends Animal {
        run() {
            console.log(`${this.name}再跑`);

        }
        sayHello() {
            console.log('汪汪汪');
        }
    }
    // 定义表示一个猫的类
    // extends 继承
    // 使 Cat 类继承 Animal 类
    class Cat extends Animal {
    }

    const dog = new Dog('旺财', 5);
    const cat = new Cat('咪咪', 3);
    console.log('dog', dog);
    dog.sayHello();
    console.log('cat', cat);
    cat.sayHello();

})();